home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 7
/
Gekikoh Dennoh Club Vol. 7 (Japan).7z
/
Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin
/
tools
/
d
/
jydrv210.lzh
/
JOYDRV.S
< prev
next >
Wrap
Text File
|
1998-12-27
|
62KB
|
2,539 lines
.cpu 68000
JOY_MAX equ 7 * 接続可能パット数
DATA_SIZE equ 256 * データサイズ
PAD_TYPE_ATARI equ $0000 * パッドタイプ = アタリ
PAD_TYPE_MD equ $0001 * パッドタイプ = メガドライブ
PAD_TYPE_SS equ $0002 * パッドタイプ = サターン
PAD_TYPE_PS equ $0003 * パッドタイプ = プレイステーション
PAD_TYPE_NOTAP equ $0000 * マルチタップ無し
PAD_TYPE_MTAP equ $0100 * マルチタップ有り
COM_DATA_INIT .macro
.dc.w 0 * ドライバ JOYDRV
.dc.w JOY_MAX-1 * JOY STICKポート1 最大パッド数
.dc.w 2 * マルチタップ判定を行う(キャッシュあり)
.dc.w 1 * JOYDRV拡張モード
.dcb.b 8,$00 * 予約領域
.dcb.b 16,$00 * アナログデータ格納領域
.dcb.b 32,$00 * 予約領域
.dcb.b 32,$00 * 受信用バッファ
.dcb.b 32,$00 * 送信用バッファアドレス
.endm
JOY_DATA_INIT .macro
.dc.l $FFFFFFFF * パッドタイプ = 不明
.dc.w 0 * ビット変換無し
.dc.l $0003004f * 十字キーエミュレート(上下左右,しきい値$4F)
.dc.w 0 * データはキャッシュされていない
.dc.w 0 * モーター振動ステータス
.dcb.b 18,$00 * 予約領域
.dc.w $fffe * 変換データ
.dc.w $fffd * 変換データ
.dc.w $fffb * 変換データ
.dc.w $fff7 * 変換データ
.dc.w $ffef * 変換データ
.dc.w $ffdf * 変換データ
.dc.w $ffbf * 変換データ
.dc.w $ff7f * 変換データ
.dc.w $feff * 変換データ
.dc.w $fdff * 変換データ
.dc.w $fbff * 変換データ
.dc.w $f7ff * 変換データ
.dc.w $efff * 変換データ
.dc.w $dfff * 変換データ
.dc.w $bfff * 変換データ
.dc.w $7fff * 変換データ
.dcb.b 32,$00 * 受信用バッファ
.dcb.b 32,$00 * 送信用バッファアドレス
.dc.l $00000000 * プレイステーション振動パッドコマンドアドレス
.dc.l 0 * PSパッドアクセス間隔計測用
.dc.w $0000 * プレイステーション振動パッドステータス
.dcb.b 118,$00 * 末端+1 = 256
.endm
.offset 0 * 共通データ領域フォーマット
COM_CTRL_DRV:
.ds.w 1 * 制御ドライバ指定
COM_JOY1_MAX:
.ds.w 1 * JOY STICKポート1 最大パッド数
COM_HANTEI_MODE:
.ds.w 1 * パッド接続ケーブル/マルチタップ判定モード
COM_IOCS3B_OUT:
.ds.w 1 * IOCS$3B出力モード
COM_YOBI_001:
.ds.b 8 * 予約領域(8バイト)
COM_ANALOG_DATA:
.ds.b 16 * アナログデータ格納領域
COM_YOBI_002:
.ds.b 32 * 予約領域(32バイト)
COM_RCV_BUF:
.ds.b 32 * 通信用受信バッファ
COM_SND_BUF:
.ds.b 32 * 通信用送信バッファアドレス
.offset 0 * ジョイスティック別データ領域フォーマット
JOY_PAD_TYPE:
.ds.l 1 * パッドタイプ
JOY_CNV_MODE:
.ds.w 1 * ビット変換モード
JOY_PLUS_EMU:
.ds.l 1 * アナログスティック -> 十字キーエミュレート
JOY_CACHE_STS:
.ds.w 1 * マルチタップキャッシュ制御
JOY_MOTOR_STS:
.ds.w 1 * モーターステータス
JOY_YOBI_001:
.ds.b 18 * 予約領域(18バイト)
JOY_CNV_DATA:
.ds.w 16 * ビット変換データ
JOY_RCV_BUF:
.ds.b 32 * 通信用受信バッファ
JOY_SND_BUF:
.ds.b 32 * 通信用送信バッファ
JOY_PS_MOTOR_ADR:
.ds.l 1 * プレイステーション振動パッドコマンドアドレス
JOY_PS_MOTOR_TIME:
.ds.l 1 * PSパッドアクセス間隔計測用
JOY_PS_MOTOR_STS:
.ds.w 1 * プレイステーション振動パッドステータス
.text
DEVHEAD:
.dc.l $ffffffff * リンクポインタ
.dc.w $8020 * デバイス属性
.dc.l STRTG_RTN * ストラテジルーチンアドレス
.dc.l DEV_RTN * ドライバルーチンアドレス
KEEP_CHK_NAME:
.dc.b 'JOYDRV*/' * デバイス名
KEEP_CHK_VER:
.dc.b $02,$01,$00,$00 * バージョン(X.XXY) X:数値 Y:アルファベット
IOCS3B: * IOCS3B処理
tst.w d1
bmi MODECNV_RTN * モード変更か?
movem.l d1-d6/a1-a4,-(a7) * レジスタ保存
lea.l $e9a001,a0 * ジョイスティックI/Oアドレス
lea.l 6(a0),a2 * ジョイスティックI/Oアドレス
move.w COM_DATA+COM_HANTEI_MODE(pc),d0
beq ATARI68 * アタリ他68通常パッド読み込み
move.b #9,(a2) * ON
tst.b (a0) * WAIT
move.b (a0),d0
andi.b #$0f,d0
cmpi.b #2,d0
beq PS_CABLE * プレイステーション接続ケーブルか?
cmpi.b #1,d0
beq SATURN_EXT * セガサターンマルチタップまたはマルチコンか?
cmpi.b #3,d0
beq MD_MTAP * メガドライブマルチタップか?
tst.w d1
bne ATARI68
andi.b #7,d0 * 下位3ビット有効
cmpi.b #4,d0
beq SATURN_NORMAL * サターンパットか?
ATARI68: * アタリ他68通常パッド読み込み
moveq.l #$ff,d0 * パッドタイプ = 不明
cmpi.w #2,d1
bcc IOCS3B_ERROR * ジョイスティック番号が範囲外か?
move.w d1,d0
add.w d0,d0 * ジョイスティック番号*2
ATARI68_1: * ここに飛ぶには、d0に(0,2)とd1にJOY番号をセットすること
moveq.l #8,d2
add.b d0,d2 * ビットOFF情報取得
moveq.l #9,d3
add.b d0,d3 * ビットON情報取得
moveq.l #0,d4 * パッドタイプ = アタリ
adda.w d0,a0
lsl.w #8,d1
lea.l JOY_DATA(pc),a1
adda.w d1,a1
move.w sr,d5 * SRレジスタ保持
ori.w #$0700,sr * 割り込み禁止
move.b d3,(a2) * ON
move.b d2,(a2) * OFF
move.b d3,(a2) * ON
move.b d2,(a2) * OFF
move.b d3,(a2) * ON
moveq.l #$ff,d0 * WAIT
move.b (a0),d0 * ポート読み込み
move.b d2,(a2) * OFF
move.b d0,d2 * WAIT
move.b (a0),d0 * ポート読み込み
move.b d3,(a2) * ON
move.b d0,d3
andi.b #$0c,d0
bne ATARI68_3 * 変換コネクタを使用していないか?
move.b (a0),d1 * 6ボタン情報読み込み
move.l #PAD_TYPE_MD*65536+PAD_TYPE_NOTAP+$01,d4 * パッドタイプ = メガドラ6B
move.b d3,d0
andi.b #$0f,d0
beq ATARI68_2 * 6ボタンか?
st.b d1 * 3ボタンの時,6ボタンの位置を無効にする
clr.b d4 * パッドタイプ = メガドラ3B
ATARI68_2:
ori.b #$f0,d1 * 未使用ビット消去
ori.b #$0f,d3 * 未使用ビット消去
and.b d1,d3 * アダプタと同じ情報を生成する
exg.l d3,d2 * 情報交換
ATARI68_3:
move.w d5,sr * SRレジスタ復帰
move.b d2,d0
lsl.b #1,d0
asr.b #2,d0
ori.b #$6f,d0 * STARTとAボタンのみにする(bit 7..START bit 4..A)
and.b d3,d0 * 十字キーの情報にSTARTとAボタン情報を付加する
ror.w #4,d2
ori.w #$0fff,d2 * 6ボタン情報のみにする
move.w d2,d3
ror.w #4,d3 * TWIN PLUS対応(右十字キー)
and.w d2,d3 * 6ボタンと右十字キー情報合成
and.w d3,d0 * 全情報セット
move.l d4,JOY_PAD_TYPE(a1) * パッドタイプ保存
clr.b COM_DATA+COM_ANALOG_DATA * アナログ読み込み無し
IOCS3B_CNV_MODE: * ビット変換処理(D0.Wに読み込み結果,A1.Lに領域の先頭アドレス)
tst.w JOY_CNV_MODE(a1)
beq IOCS3B_CODE_MODE
lea.l JOY_CNV_DATA+30(a1),a0
moveq.l #$ff,d1
moveq.l #15,d2
IOCS3B_CNV_MODE_1:
btst.l d2,d0
bne IOCS3B_CNV_MODE_2
and.w (a0),d1
IOCS3B_CNV_MODE_2:
subq.w #2,a0
dbra d2,IOCS3B_CNV_MODE_1
move.l d1,d0
IOCS3B_CODE_MODE: * 出力モード設定処理
move.w COM_DATA+COM_IOCS3B_OUT(pc),d1
bne IOCS3B_END
andi.w #$00ff,d0
ext.l d0
ori.b #$90,d0
IOCS3B_END: * IOCS3B処理終了
movem.l (a7)+,d1-d6/a1-a4 * レジスタ復帰
rts
IOCS3B_ERROR: * D0.L にPAD TYPE D1.W にJOY番号を格納
cmpi.w #JOY_MAX,d1
bcc IOCS3B_ERROR_1
lsl.w #8,d1
lea.l JOY_DATA(pc),a1
adda.w d1,a1
move.l d0,JOY_PAD_TYPE(a1) * パッドタイプ格納
bmi IOCS3B_ERROR_1
moveq.l #$ff,d0
clr.b COM_DATA+COM_ANALOG_DATA * アナログ読み込み無し
bra IOCS3B_CODE_MODE
IOCS3B_ERROR_1:
moveq.l #0,d0 * エラー
bra IOCS3B_END
PLUS_EMU_SET: * 十字キーエミュレート設定
move.w JOY_PLUS_EMU(a1),d4
and.b COM_DATA+COM_ANALOG_DATA(pc),d4
move.w JOY_PLUS_EMU+2(a1),d1
moveq.l #0,d2
moveq.l #0,d3
st.b d2
eor.b d1,d2
btst.l #1,d4
beq PLUS_EMU_SET_2
move.b COM_DATA+COM_ANALOG_DATA+2(pc),d3
cmp.w d1,d3
bgt PLUS_EMU_SET_1
andi.w #$fffb,d0 * 左キーエミュレート
bra PLUS_EMU_SET_2
PLUS_EMU_SET_1:
cmp.w d2,d3
blt PLUS_EMU_SET_2
andi.w #$fff7,d0 * 右キーエミュレート
PLUS_EMU_SET_2:
btst.l #0,d4
beq PLUS_EMU_SET_4
move.b COM_DATA+COM_ANALOG_DATA+1(pc),d3
cmp.w d1,d3
bgt PLUS_EMU_SET_3
andi.w #$fffe,d0 * 上キーエミュレート
bra PLUS_EMU_SET_4
PLUS_EMU_SET_3:
cmp.w d2,d3
blt PLUS_EMU_SET_4
andi.w #$fffd,d0 * 下キーエミュレート
PLUS_EMU_SET_4:
btst.l #3,d4
beq PLUS_EMU_SET_6
move.b COM_DATA+COM_ANALOG_DATA+4(pc),d3
cmp.w d1,d3
bgt PLUS_EMU_SET_5
andi.w #$fbff,d0 * 左キーエミュレート
bra PLUS_EMU_SET_6
PLUS_EMU_SET_5:
cmp.w d2,d3
blt PLUS_EMU_SET_6
andi.w #$f7ff,d0 * 右キーエミュレート
PLUS_EMU_SET_6:
btst.l #2,d4
beq PLUS_EMU_SET_8
move.b COM_DATA+COM_ANALOG_DATA+3(pc),d3
cmp.w d1,d3
bgt PLUS_EMU_SET_7
andi.w #$feff,d0 * 上キーエミュレート
bra PLUS_EMU_SET_8
PLUS_EMU_SET_7:
cmp.w d2,d3
blt PLUS_EMU_SET_8
andi.w #$fdff,d0 * 下キーエミュレート
PLUS_EMU_SET_8:
rts
SATURN_NORMAL: * サターン,ノーマルパッド読み込み
moveq.l #$ff,d0 * データ初期化
moveq.l #8,d2
move.b (a0),d0 * ポート読み込み(Lボタン)
move.b d2,(a2) * PC4 = 0
moveq.l #9,d3
lsl.w #8,d1
lea.l JOY_DATA(pc),a1
adda.w d1,a1
lsl.b #1,d0
ori.b #$e0,d0 * Lボタンのみ有効にする
tst.b (a0) * WAIT
move.b (a0),d4 * ポート読み込み(上,下,左,右)
move.b d3,(a2) * PC4 = 1
move.b #$d,(a2) * PC6 = 1
andi.b #$0f,d4 * 方向キーのみを有効にする
andi.b #$f0,d0 * WAIT
tst.b (a0) * WAIT
move.b (a0),d1 * ポート読み込み(START,A,C,B)
move.b d2,(a2) * PC4 = 0
lsl.b #4,d1
or.b d1,d4 * 上,下,左,右 + START,A,C,B
tst.b (a0) * WAIT
move.b (a0),d1 * ポート読み込み(Rボタン,X,Y,Z)
move.b d3,(a2) * PC4 = 1
move.b #$c,(a2) * PC6 = 0
andi.b #$0f,d1 * ボタンのみを有効にする
or.b d1,d0 * L + R,X,Y,Z
lsl.w #8,d0 * L,R,X,Y,Zを上位に
move.b d4,d0 * 全データセット
clr.b COM_DATA+COM_ANALOG_DATA * アナログ読み込み無し
move.l #PAD_TYPE_SS*65536,JOY_PAD_TYPE(a1) * パッドタイプ = サターンデジタル(マルチタップ無し)
bra IOCS3B_CNV_MODE
SATURN_EXT: * サターン,マルチタップ読み込み
move.b #8,(a2) * PC4 = 0
moveq.l #4,d0
bsr JOY_WAIT
move.l #PAD_TYPE_SS*65536,d6 * パッドタイプ = サターン
moveq.l #1,d4 * 接続コントローラ数
SATURN_EXT_1:
bsr SATURN_GETDATA * データ読み込み
cmpi.b #4,d2
bne SATURN_EXT_2 * マルチタップ以外か?
bsr SATURN_GETDATA * データ読み込み
move.w d2,d4 * 接続コントローラ数設定
move.w #PAD_TYPE_MTAP,d6 * パッドタイプ = サターン + マルチタップ
bra SATURN_EXT_1
SATURN_EXT_2:
cmp.w COM_DATA+COM_JOY1_MAX(pc),d4
ble SATURN_EXT_3
move.w COM_DATA+COM_JOY1_MAX(pc),d4
SATURN_EXT_3:
cmp.w d4,d1
beq SATURN_EXT_ERROR3 * タップ最大数+1
bgt SATURN_EXT_ERROR2 * JOY番号範囲外
move.w d1,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a1
adda.w d0,a1 * 対象JOY番号のデータ領域
cmpi.w #1,COM_DATA+COM_HANTEI_MODE
beq SATURN_EXT_4 * キャッシュ無し指定か
move.l JOY_PAD_TYPE(a1),d0
clr.b d0
cmp.l d6,d0
bne SATURN_EXT_4 * 前回がサターンマルチタップ以外か
tst.b JOY_CACHE_STS(a1)
bne SATURN_EXT_9 * キャッシュされているデータがあるか
SATURN_EXT_4:
move.w d4,COM_DATA+COM_RCV_BUF * パッド数セット
lea.l JOY_DATA(pc),a3 * データ領域先頭アドレス
lea.l JOY_RCV_BUF(a3),a4
subq.w #1,d4
bra SATURN_EXT_6
SATURN_EXT_5:
lea.l DATA_SIZE(a3),a3 * 次のJOY番号のデータ領域
lea.l JOY_RCV_BUF(a3),a4
bsr SATURN_GETDATA * データ読み込み
SATURN_EXT_6:
move.b d2,d6
move.l d6,JOY_PAD_TYPE(a3)
move.b d2,(a4)+ * コントローラタイプ
move.b d3,(a4)+ * 転送バイト数
cmpi.b #$f,d2
beq SATURN_EXT_8 * コントローラが未接続か
move.w d3,d5 * 転送バイト数設定
subq.w #1,d5
SATURN_EXT_7:
bsr SATURN_GETDATA * データ読み込み
move.b d2,(a4)+ * 1個目のデータセット
move.b d3,(a4)+ * 2個目のデータセット
dbra d5,SATURN_EXT_7
SATURN_EXT_8:
st.b JOY_CACHE_STS(a3) * キャッシュデータ有りにする
dbra d4,SATURN_EXT_5
SATURN_EXT_9:
move.b #9,(a2) * PC4 = 1
clr.b JOY_CACHE_STS(a1) * キャッシュデータ無しにする
lea.l COM_DATA+COM_ANALOG_DATA(pc),a0 * アナログデータ格納エリア
lea.l JOY_RCV_BUF(a1),a2
moveq.l #0,d0
move.b (a2)+,d0 * コントローラタイプ取得
add.w d0,d0 * 2倍
move.w SATURN_PADTYPE(pc,d0.w),d0
jmp SATURN_PADTYPE(pc,d0.w) * タイプ別処理に飛ぶ
SATURN_PADTYPE:
.dc.w SATURN_DIGITAL-SATURN_PADTYPE * デジタルパッド
.dc.w SATURN_ANALOG-SATURN_PADTYPE * アナログパッド
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * マルチタップ
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_RESERVE-SATURN_PADTYPE * ?
.dc.w SATURN_NOPAD-SATURN_PADTYPE * 未接続
SATURN_DIGITAL:
SATURN_ANALOG:
clr.b (a0) * アナログ読み込み情報クリア
move.b (a2)+,d4 * 転送バイト数
moveq.l #$ff,d0
move.b (a2)+,d0 * 上、下、左、右の読み込み
ror.w #4,d0
move.b (a2)+,d0 * B、C、A、STARTの読み込み
ror.w #4,d0
move.b (a2)+,d0 * X、Y、Z、Rの読み込み
ror.w #4,d0
ori.b #$0f,d0
move.b (a2)+,d1 * Lの読み込み
lsr.b #4,d1
roxr.w #4,d0
subq.b #2,d4
beq IOCS3B_CNV_MODE * デシタルデータ ONLYか
move.b (a2)+,d1 * 左右アナログ値(上位4ビット)の読み込み
lsl.b #4,d1
or.b (a2)+,d1 * 上位4ビット + 左右アナログ値(下位4ビット)
move.b d1,2(a0) * 左右アナログ値セット
ori.b #$02,(a0) * 左右アナログ値有効
subq.b #1,d4
beq SATURN_ANALOG_1
move.b (a2)+,d1 * 上下アナログ値(上位4ビット)の読み込み
lsl.b #4,d1
or.b (a2)+,d1 * 上位4ビット + 上下アナログ値(下位4ビット)
move.b d1,1(a0) * 上下アナログ値セット
ori.b #$01,(a0) * 上下アナログ値有効
subq.b #1,d4
beq SATURN_ANALOG_1
move.b (a2)+,d1 * Rアナログ値(上位4ビット)の読み込み
lsl.b #4,d1
or.b (a2)+,d1 * 上位4ビット + Rアナログ値(下位4ビット)
move.b d1,5(a0) * Rアナログ値セット
ori.b #$10,(a0) * Rアナログ値有効
subq.b #1,d4
beq SATURN_ANALOG_1
move.b (a2)+,d1 * Lアナログ値(上位4ビット)の読み込み
lsl.b #4,d1
or.b (a2)+,d1 * 上位4ビット + Lアナログ値(下位4ビット)
move.b d1,6(a0) * Lアナログ値セット
ori.b #$20,(a0) * Lアナログ値有効
SATURN_ANALOG_1:
bsr PLUS_EMU_SET * 十字キーエミュレート設定
bra IOCS3B_CNV_MODE
SATURN_RESERVE:
SATURN_NOPAD:
clr.b (a0) * アナログ読み込み情報クリア
moveq.l #$ff,d0
bra IOCS3B_CODE_MODE
SATURN_GETDATA:
move.b #$d,(a2) * PC6 = 1
moveq.l #$7f,d0
SATURN_GETDATA_1:
btst.b #6,(a0)
dbeq d0,SATURN_GETDATA_1 * ステータス待ち
bne SATURN_EXT_ERROR1 * ケーブル接続エラー
move.b (a0),d2 * データ読み込み
move.b #$c,(a2) * PC6 = 0
andi.w #$000f,d2 * 下位4ビットのみ有効
moveq.l #$7f,d0
SATURN_GETDATA_2:
btst.b #6,(a0)
dbne d0,SATURN_GETDATA_2 * ステータス待ち
beq SATURN_EXT_ERROR1 * ケーブル接続エラー
move.b (a0),d3 * データ読み込み
andi.w #$000f,d3 * 下位4ビットのみ有効
rts
SATURN_EXT_ERROR1:
addq.w #4,a7 * rts分補正
move.b #$c,(a2) * PC6 = 0
move.b #9,(a2) * PC4 = 1
move.l #PAD_TYPE_SS*65536+$0f,d0 * パッドタイプ = SS無接続
bra IOCS3B_ERROR
SATURN_EXT_ERROR2:
move.b #9,(a2) * PC4 = 1
moveq.l #$ff,d0 * パッドタイプ = 不明
bra IOCS3B_ERROR
SATURN_EXT_ERROR3:
move.b #9,(a2) * PC4 = 1
moveq.l #2,d0 * JOYSTICK PORT 1
bra ATARI68_1
PS_CABLE:
moveq.l #$ff,d0 * パッドタイプ = 不明
move.w COM_DATA+COM_JOY1_MAX(pc),d2
cmpi.w #JOY_MAX-1,d2
ble PS_CABLE_1
move.w #JOY_MAX-1,d2
PS_CABLE_1:
cmp.w d2,d1
beq PS_CABLE_ERROR1 * マルチタップ最大数+1
bgt IOCS3B_ERROR * JOY番号が範囲外か
move.b #8,(a2) * PC4 = 0
move.w d1,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a1
adda.w d0,a1 * 対象JOY番号のデータ領域
lea.l JOY_RCV_BUF(a1),a4
moveq.l #11,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.w d1,d2
addq.w #1,d2 * 読み込みパッド位置指定
bsr PS_IF_PAD * 通信
cmpi.w #PAD_TYPE_PS,JOY_PAD_TYPE(a1)
bne PS_MOTOR_CTRL1 * パッドがPS以外だったか
cmpi.b #$0f,JOY_PAD_TYPE+3(a1)
beq PS_MOTOR_CTRL1 * パッドが未接続だったか
move.l a0,d5 * A0レジスタ保持
move.l d1,d2 * D1レジスタ保持
move.l a5,d3 * A5レジスタ保持
clr.l a5 * IOCS.X対策
move.w sr,d4 * SRレジスタ保持
movea.l $5fc.w,a3
jsr (a3) * IOCS(ON TIME)
move.w d4,sr * SRレジスタ復帰
movea.l d3,a5 * A5レジスタ復帰
move.l d2,d1 * D1レジスタ復帰
movea.l d5,a0 * A0レジスタ復帰
move.l JOY_PS_MOTOR_TIME(a1),d2
move.l d0,JOY_PS_MOTOR_TIME(a1)
sub.l d2,d0
cmpi.l #200,d0
bcc PS_MOTOR_CTRL1 * 2秒以上アクセスがないか
move.l JOY_PS_MOTOR_ADR(a1),d0
bne PS_MOTOR_CTRL2 * モーターパラメータ転送中か
PS_CABLE_2:
lea.l PS_PAD_SND(pc),a3 * パッド読み込みコマンド
move.w JOY_MOTOR_STS(a1),d0
andi.w #$01ff,d0
tst.b JOY_PS_MOTOR_STS(a1)
bne PS_CABLE_3 * デュアルショックか
lsr.w #8,d0
ori.w #$4000,d0
PS_CABLE_3:
move.w d0,2(a3) * 振動ステータスセット
PS_CABLE_10:
move.b (a3)+,d2 * コマンド1バイト取り出し
bsr PS_IF_PAD * 通信
cmpi.b #$ff,d2
beq PS_CABLE_ERROR2
move.b d2,d0
lsr.b #4,d0
move.b d0,(a4)+ * コントローラタイプ
andi.b #$0f,d2
add.b d2,d2
move.b d2,(a4)+ * 転送バイト数
moveq.l #0,d4
move.b d2,d4
PS_CABLE_11:
move.b (a3)+,d2 * コマンド1バイト取り出し
bsr PS_IF_PAD * 通信
move.b d2,(a4)+
dbra d4,PS_CABLE_11
PS_CABLE_20:
lea.l COM_DATA+COM_ANALOG_DATA(pc),a0 * アナログデータ格納エリア
move.l #PAD_TYPE_PS*65536,d0
move.b #9,(a2) * PC4 = 1
lea.l JOY_RCV_BUF(a1),a2
move.b (a2)+,d0 * コントローラタイプ取得
move.l d0,JOY_PAD_TYPE(a1) * パッドタイプ = PS
andi.w #$00ff,d0
add.w d0,d0 * 2倍
move.w PS_PADTYPE(pc,d0.w),d0
jmp PS_PADTYPE(pc,d0.w) * タイプ別処理に飛ぶ
PS_CABLE_ERROR1:
moveq.l #2,d0 * JOYSTICK PORT 1
bra ATARI68_1
PS_CABLE_ERROR2:
move.l #PAD_TYPE_PS*65536+$0f,d0 * パッドタイプ = PS無接続
clr.l JOY_PS_MOTOR_ADR(a1)
clr.b JOY_PS_MOTOR_STS(a1)
move.b #9,(a2) * PC4 = 1
bra IOCS3B_ERROR
PS_CABLE_ERROR3:
tst.l JOY_PS_MOTOR_ADR(a1)
bne IOCS3B_CNV_MODE
move.l #PS_PAD_SND,JOY_PS_MOTOR_ADR(a1)
clr.b JOY_PS_MOTOR_STS(a1)
bra IOCS3B_CNV_MODE
PS_PADTYPE:
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_MOUSE-PS_PADTYPE * マウス
.dc.w PS_ANALOG1-PS_PADTYPE * アナログパッド(1STICK)
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_DIGITAL-PS_PADTYPE * デジタルパッド
.dc.w PS_ANALOG2-PS_PADTYPE * アナログパッド(2STICK)
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_ANALOG2-PS_PADTYPE * アナログパッド(2STICK)
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_RESERVE-PS_PADTYPE * ?
.dc.w PS_JOGCON-PS_PADTYPE * ジョグコン
.dc.w PS_UNKNOWPAD-PS_PADTYPE * その他
PS_MOUSE:
move.b (a2)+,d4 * サイズ取得
move.b (a2)+,d6 * 通信ステータス取得
bsr PS_DIGITAL_SET
subq.b #2,d4
beq IOCS3B_CNV_MODE
move.b (a2)+,1(a0) * 上下移動
ori.b #$01,(a0)
subq.b #1,d4
beq PS_ANALOG2_1
move.b (a2)+,2(a0) * 左右移動
ori.b #$02,(a0)
subq.b #1,d4
PS_MOUSE_1:
bsr PLUS_EMU_SET * 十字キーエミュレート設定
cmpi.b #$5a,d6
bne PS_CABLE_ERROR3
bra IOCS3B_CNV_MODE
PS_ANALOG1:
move.b (a2)+,d4 * サイズ取得
move.b (a2)+,d6 * 通信ステータス取得
bsr PS_DIGITAL_SET
subq.b #2,d4
beq IOCS3B_CNV_MODE
move.b (a2)+,2(a0) * ねじり
ori.b #$02,(a0)
subq.b #1,d4
beq PS_ANALOG1_1
move.b (a2)+,5(a0) * ボタン1
ori.b #$10,(a0)
subq.b #1,d4
beq PS_ANALOG1_1
move.b (a2)+,6(a0) * ボタン2
ori.b #$20,(a0)
subq.b #1,d4
beq PS_ANALOG1_1
move.b (a2)+,7(a0) * ボタンL
ori.b #$40,(a0)
subq.b #1,d4
PS_ANALOG1_1:
bsr PLUS_EMU_SET * 十字キーエミュレート設定
cmpi.b #$5a,d6
bne PS_CABLE_ERROR3
bra IOCS3B_CNV_MODE
PS_DIGITAL:
move.b (a2)+,d4 * サイズ取得
move.b (a2)+,d6 * 通信ステータス取得
bsr PS_DIGITAL_SET
cmpi.b #$5a,d6
bne PS_CABLE_ERROR3
bra IOCS3B_CNV_MODE
PS_ANALOG2:
move.b (a2)+,d4 * サイズ取得
move.b (a2)+,d6 * 通信ステータス取得
bsr PS_DIGITAL_SET
subq.b #2,d4
beq IOCS3B_CNV_MODE
move.b (a2)+,4(a0) * 右スティック左右
ori.b #$08,(a0)
subq.b #1,d4
beq PS_ANALOG2_1
move.b (a2)+,3(a0) * 右スティック上下
ori.b #$04,(a0)
subq.b #1,d4
beq PS_ANALOG2_1
move.b (a2)+,2(a0) * 左スティック左右
ori.b #$02,(a0)
subq.b #1,d4
beq PS_ANALOG2_1
move.b (a2)+,1(a0) * 左スティック上下
ori.b #$01,(a0)
subq.b #1,d4
PS_ANALOG2_1:
bsr PLUS_EMU_SET * 十字キーエミュレート設定
cmpi.b #$5a,d6
bne PS_CABLE_ERROR3
bra IOCS3B_CNV_MODE
PS_JOGCON:
move.b (a2)+,d4 * サイズ取得
move.b (a2)+,d6 * 通信ステータス取得
bsr PS_DIGITAL_SET
subq.b #2,d4
beq IOCS3B_CNV_MODE
move.b (a2)+,2(a0) * ジョグ回転値
ori.b #$02,(a0)
subq.b #1,d4
beq PS_JOGCON_1
move.b (a2)+,5(a0) * 右に一回転すると+1、左に一回転すると-1
ori.b #$10,(a0)
subq.b #1,d4
beq PS_JOGCON_1
move.b (a2)+,6(a0) * 右に回転していると1、左に回転していると2、回転無しは0
ori.b #$20,(a0)
subq.b #1,d4
beq PS_JOGCON_1
move.b (a2)+,7(a0) * ?
ori.b #$40,(a0)
subq.b #1,d4
PS_JOGCON_1:
bsr PLUS_EMU_SET * 十字キーエミュレート設定
bra IOCS3B_CNV_MODE
PS_UNKNOWPAD:
clr.b (a0) * アナログ読み込み情報クリア
move.l #PAD_TYPE_PS*65536+$04,d0 * パッドタイプ = PSデジタル
st.b JOY_PS_MOTOR_STS(a1) * モータータイプ = デュアルショック
bra IOCS3B_ERROR
PS_RESERVE:
clr.b (a0) * アナログ読み込み情報クリア
moveq.l #$ff,d0
bra IOCS3B_CODE_MODE
PS_DIGITAL_SET:
clr.b (a0)
move.b (a2)+,d2
lsl.w #8,d2
move.b (a2)+,d2
moveq.l #$ff,d0
lea.l PSCNV_DATA(pc),a3
moveq.l #15,d3
PS_DIGITAL_SET_1:
btst.l d3,d2
bne PS_DIGITAL_SET_2
and.w (a3),d0
PS_DIGITAL_SET_2:
addq.w #2,a3
dbra d3,PS_DIGITAL_SET_1
rts
PSCNV_DATA:
.dc.w $fffb * 左変換データ
.dc.w $fffd * 下変換データ
.dc.w $fff7 * 右変換データ
.dc.w $fffe * 上変換データ
.dc.w $ff7f * スタート変換データ
.dc.w $dfff * 右アナログスティックボタン変換データ
.dc.w $bfff * 左アナログスティックボタン変換データ
.dc.w $7fff * セレクト変換データ
.dc.w $fbff * □変換データ
.dc.w $ffbf * ×変換データ
.dc.w $ffef * ○変換データ
.dc.w $fdff * △変換データ
.dc.w $feff * R1変換データ
.dc.w $f7ff * L1変換データ
.dc.w $ffdf * R2変換データ
.dc.w $efff * L2変換データ
PS_MOTOR_CTRL1:
lea.l PS_MOTOR_PARM(pc),a3
move.l a3,JOY_PS_MOTOR_ADR(a1)
clr.b JOY_PS_MOTOR_STS(a1)
bra PS_CABLE_10
PS_MOTOR_CTRL2:
movea.l d0,a3
lea.l 32(a3),a3
tst.b (a3)
beq PS_MOTOR_CTRL2_1
move.l a3,JOY_PS_MOTOR_ADR(a1)
bra PS_CABLE_10
PS_MOTOR_CTRL2_1:
clr.l JOY_PS_MOTOR_ADR(a1)
bra PS_CABLE_2
*
* 1バイトコマンド転送 & データ取得(コントローラ専用)
*
* IN D2.B = コマンド
* A0.L = $e9a001
* A2.L = $e9a007
*
* OUT D0.L = 破壊
* D2.B = データ
* D3.L = 破壊
* D5.w = 破壊
PS_IF_PAD:
moveq.l #7,d3 * CLKカウンタ
not.b d2 * CMD反転
lsr.b #1,d2 * XフラグにCMD
move.w sr,d5 * SRレジスタ保持
ori.w #$0700,sr * 割り込み禁止
PS_IF_PAD_1:
moveq.l #7,d0
roxl.b #1,d0
move.b d0,(a2) * CMD書き込み
move.b #$d,(a2) * CLK = 0
moveq.l #5,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.b #$c,(a2) * CLK = 1
moveq.l #4,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.b (a0),d0 * DAT読み込み
lsr.b #1,d0 * XフラグにDAT
roxr.b #1,d2 * d2にDATをセットして、XフラグにCMD
dbra d3,PS_IF_PAD_1
move.b #$e,(a2) * CMD = 1
move.w d5,sr * SRレジスタ復帰
moveq.l #4,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
rts
JOY_WAIT:
tst.b (a0) * WAIT
dbra d0,JOY_WAIT
rts
MD_MTAP_ERROR1:
moveq.l #2,d0 * JOYSTICK PORT 1
bra ATARI68_1
MD_MTAP:
moveq.l #$ff,d0 * パッドタイプ = 不明
move.w COM_DATA+COM_JOY1_MAX(pc),d2
cmpi.w #4,d2
ble MD_MTAP_1
move.w #4,d2
MD_MTAP_1:
cmp.w d2,d1
beq MD_MTAP_ERROR1
bgt IOCS3B_ERROR * ジョイスティック番号が範囲外か?
move.l #PAD_TYPE_MD*65536+PAD_TYPE_MTAP,d6 * パッドタイプ = メガドライブ + マルチタップ
move.w d1,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a1
adda.w d0,a1 * 対象JOY番号のデータ領域
cmpi.w #1,COM_DATA+COM_HANTEI_MODE
beq MD_MTAP_2 * キャッシュ無し指定か
move.l JOY_PAD_TYPE(a1),d0
clr.b d0
cmp.l d6,d0
bne MD_MTAP_2 * 前回がメガドライブマルチタップ以外か
tst.b JOY_CACHE_STS(a1)
bne MD_MTAP_6 * キャッシュされているデータがあるか
MD_MTAP_2:
move.b #8,(a2) * PC4 = 0
lea.l JOY_DATA+JOY_RCV_BUF(pc),a3
lea.l MD_DATA_SIZE(pc),a4 * PORT SIZE DATA ADR
moveq.l #0,d5 * s_work
bsr MD_GET_DATA * DUMMY_GET
bsr MD_GET_DATA * DUMMY_GET
bsr MD_GET_DATA * DUMMY_GET
bsr MD_GET_DATA * GET PORT TYPE A
move.b d0,(a3) * コントローラタイプ
move.b 0(a4,d0.w),1(a3) * PORT A SIZE
lea.l DATA_SIZE(a3),a3 * 次のジョイスティックのデータ領域
bsr MD_GET_DATA * GET PORT TYPE B
move.b d0,(a3) * コントローラタイプ
move.b 0(a4,d0.w),1(a3) * PORT B SIZE
lea.l DATA_SIZE(a3),a3 * 次のジョイスティックのデータ領域
bsr MD_GET_DATA * GET PORT TYPE C
move.b d0,(a3) * コントローラタイプ
move.b 0(a4,d0.w),1(a3) * PORT C SIZE
lea.l DATA_SIZE(a3),a3 * 次のジョイスティックのデータ領域
bsr MD_GET_DATA * GET PORT TYPE D
move.b d0,(a3) * コントローラタイプ
move.b 0(a4,d0.w),1(a3) * PORT D SIZE
lea.l JOY_DATA(pc),a3
moveq.l #3,d4 * ループ回数-1
MD_MTAP_3:
lea.l JOY_RCV_BUF(a3),a4
move.b (a4)+,d6
move.l d6,JOY_PAD_TYPE(a3) * コントローラタイプ
moveq.l #0,d3
move.b (a4)+,d3
beq MD_MTAP_5
subq.w #1,d3
MD_MTAP_4:
bsr MD_GET_DATA * GET DATA
move.b d0,(a4)+ * データ書き込み
dbra d3,MD_MTAP_4
MD_MTAP_5:
st.b JOY_CACHE_STS(a3) * キャッシュデータ有りにする
lea.l DATA_SIZE(a3),a3 * 次のジョイスティックのデータ領域
dbra d4,MD_MTAP_3
move.b #14,(a2) * PC7 = 0
move.b #9,(a2) * PC4 = 1
MD_MTAP_6:
clr.b JOY_CACHE_STS(a1) * キャッシュデータ無しにする
lea.l COM_DATA+COM_ANALOG_DATA(pc),a0 * アナログデータ格納エリア
lea.l JOY_RCV_BUF(a1),a2
moveq.l #0,d0
move.b (a2)+,d0 * コントローラタイプ取得
add.w d0,d0 * 2倍
move.w MD_PADTYPE(pc,d0.w),d0
jmp MD_PADTYPE(pc,d0.w) * タイプ別処理に飛ぶ
MD_PADTYPE:
.dc.w MD_3BUTTON-MD_PADTYPE * 3ボタン
.dc.w MD_6BUTTON-MD_PADTYPE * 6ボタン
.dc.w MD_MOUSE-MD_PADTYPE * マウス
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_RESERVE-MD_PADTYPE * ?
.dc.w MD_NOPAD-MD_PADTYPE * 未接続
MD_3BUTTON:
clr.b (a0)
tst.b (a2)+ * サイズ分読み飛ばし
moveq.l #$ff,d0
move.b (a2)+,d0
move.b (a2),d2
lsl.b #4,d2
or.b d2,d0
bra IOCS3B_CNV_MODE
MD_6BUTTON:
clr.b (a0)
tst.b (a2)+ * サイズ分読み飛ばし
moveq.l #$ff,d0
move.b (a2)+,d2
move.b (a2)+,d3
move.b (a2),d0
ori.b #$f0,d0
lsl.w #8,d0
lsl.b #4,d3
or.b d3,d2
move.b d2,d0
bra IOCS3B_CNV_MODE
MD_MOUSE:
MD_RESERVE:
MD_NOPAD:
clr.b (a0) * アナログ読み込み情報クリア
moveq.l #$ff,d0
bra IOCS3B_CODE_MODE
MD_GET_DATA:
tst.b d5
bne MD_GET_DATA_3
move.b #14,(a2) * PC7 = 0
moveq.l #$7f,d0
MD_GET_DATA_1:
btst.b #5,(a0) * PA5 == 1 ?
dbne d0,MD_GET_DATA_1
beq MD_MTAP_ERROR2 * 接続エラー
move.b (a0),d0 * GET_DATA
move.b #15,(a2) * PC7 = 1
moveq.l #$7f,d2
MD_GET_DATA_2:
btst.b #5,(a0) * PA5 == 0 ?
dbeq d2,MD_GET_DATA_2
bne MD_MTAP_ERROR2 * 接続エラー
move.b (a0),d2 * GET_DATA
moveq.l #1,d5
bra MD_GET_DATA_4
MD_GET_DATA_3:
move.b d2,d0
moveq.l #0,d5 * s_work
MD_GET_DATA_4:
andi.w #$000f,d0
rts
MD_MTAP_ERROR2:
addq.w #4,a7 * rts分補正
move.b #14,(a2) * PC7 = 0
move.b #9,(a2) * PC4 = 1
move.l #PAD_TYPE_MD*65536+$0f,d0 * パッドタイプ = メガドライブ無接続
bra IOCS3B_ERROR
MD_DATA_SIZE:
.dc.b 2 * 3ボタン
.dc.b 3 * 6ボタン
.dc.b 6 * セガマウス
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 無し
.dc.b 0 * 未接続
COM_DATA:
COM_DATA_INIT * 共通データ
JOY_DATA:
JOY_DATA_INIT
JOY_DATA_INIT
JOY_DATA_INIT
JOY_DATA_INIT
JOY_DATA_INIT
JOY_DATA_INIT
JOY_DATA_INIT
PS_PAD_SND:
.dc.b $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
PS_MOTOR_PARM:
.dc.b $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $43,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $45,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $4c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $47,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $4c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $4c,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $45,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $45,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $47,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $43,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $43,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $4d,$00,$00,$01,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $43,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.dc.b $00,$00
.even
MODECNV_RTN:
cmpi.w #$23,d2
bcc MODECNV_RTN_1 * モード指定が範囲外か?
move.w d2,d0
add.w d0,d0 * 2倍
move.w MODECNV_TBL(pc,d0.w),d0
jmp MODECNV_TBL(pc,d0.w) * 各モード指定に飛ぶ
MODECNV_RTN_1:
moveq.l #$ff,d0 * 設定値が範囲外
rts
MODECNV_TBL:
.dc.w DRV_INITEND-MODECNV_TBL * ドライバ初期化/終了処理
.dc.w JOYDRV_KEEP_STS-MODECNV_TBL * 常駐状態取得
.dc.w GET_BUF_ADR-MODECNV_TBL * 内部データアドレス取得
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w ANALOG_GET-MODECNV_TBL * アナログパッド読み込み
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MULTI_STS-MODECNV_TBL * マルチタップ判定モード設定/取得
.dc.w CNVMODE_STS-MODECNV_TBL * ビット変換モード設定/取得
.dc.w CNVDATA_STS-MODECNV_TBL * ビット変換データ設定/取得
.dc.w OUTPUT_STS-MODECNV_TBL * 出力モード設定/取得
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MTAP_MAX_SET-MODECNV_TBL * マルチタップ・パッド接続数設定
.dc.w PLUS_EMULATION-MODECNV_TBL * アナログスティック・エミュレート設定
.dc.w PEM_PNT_SET-MODECNV_TBL * 十字キーエミュレートしきい値設定
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w MODECNV_RTN_1-MODECNV_TBL * 予備
.dc.w PS_MEMBREAD-MODECNV_TBL * プレイステーションメモリカード読み込み
.dc.w PS_MEMBWRITE-MODECNV_TBL * プレイステーションメモリカード書き込み
.dc.w PS_MOTOR-MODECNV_TBL * プレイステーション振動パッド制御
* $00~$0F システム関連
* $10~$1F 設定関連
* $20~$2F 特殊コール(プレイステーション関連)
* $30~$3F 特殊コール(サターン関連)
DRV_INITEND:
moveq.l #0,d0
movea.l #$e9a007,a0
move.b #$c,(a0)
move.b #$e,(a0)
tst.w d3
bne DRV_INITEND_1
move.b #$9,(a0)
move.b #$b,(a0)
rts
DRV_INITEND_1:
move.b #$8,(a0)
move.b #$a,(a0)
rts
JOYDRV_KEEP_STS:
lea.l KEEP_CHK_NAME(pc),a0
move.l a0,d0 * JOYDRVは常駐している
rts
GET_BUF_ADR:
cmpi.w #JOY_MAX,d3
bcc GET_BUF_ADR_1 * ジョイスティック番号が範囲外か?
move.w d3,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a1
adda.w d0,a1
moveq.l #0,d0
rts
GET_BUF_ADR_1:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
rts
MULTI_STS:
tst.w d3
bmi MULTI_STS_1 * 状態取得か?
cmpi.w #3,d3
bcc MULTI_STS_2 * 設定値が範囲外か?
lea.l COM_DATA+COM_HANTEI_MODE(pc),a0
move.w d3,(a0) * マルチタップ判定モード設定
moveq.l #0,d0 * 正常終了
rts
MULTI_STS_1:
move.w COM_DATA+COM_HANTEI_MODE(pc),d0 * マルチタップ判定モード取得
rts
MULTI_STS_2:
moveq.l #$ff,d0 * 設定値が範囲外
rts
CNVMODE_STS:
cmpi.w #JOY_MAX,d4
bcc CNVMODE_STS_1 * ジョイスティック番号が範囲外か?
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA+JOY_CNV_MODE(pc),a0
adda.w d0,a0
tst.w d3
bmi CNVMODE_STS_2 * 状態取得か?
cmpi.w #2,d3
bcc CNVMODE_STS_3 * 設定値が範囲外か?
move.w d3,(a0) * ビット変換モード設定
moveq.l #0,d0 * 正常終了
rts
CNVMODE_STS_1:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
rts
CNVMODE_STS_2:
move.w (a0),d0 * ビット変換モード取得
rts
CNVMODE_STS_3:
moveq.l #$ff,d0 * 設定値が範囲外
rts
CNVDATA_STS:
cmpi.w #JOY_MAX,d4
bcc CNVDATA_STS_2 * ジョイスティック番号が範囲外か?
move.l a1,-(a7) * レジスタ保存
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA+JOY_CNV_DATA(pc),a0
adda.w d0,a0
tst.w d3
bpl CNVDATA_STS_1 * 状態取得か?
exg.l a1,a0
CNVDATA_STS_1:
move.l (a1)+,(a0)+
move.l (a1)+,(a0)+
move.l (a1)+,(a0)+
move.l (a1)+,(a0)+
move.l (a1)+,(a0)+
move.l (a1)+,(a0)+
move.l (a1)+,(a0)+
move.l (a1),(a0) * 32バイト転送
movea.l (a7)+,a1 * レジスタ復帰
moveq.l #0,d0 * 正常終了
rts
CNVDATA_STS_2:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
rts
OUTPUT_STS:
tst.w d3
bmi OUTPUT_STS_1 * 状態取得か?
cmpi.w #2,d3
bcc OUTPUT_STS_2 * 設定値が範囲外か?
lea.l COM_DATA+COM_IOCS3B_OUT(pc),a0
move.w d3,(a0) * 出力モード設定
moveq.l #0,d0 * 正常終了
rts
OUTPUT_STS_1:
move.w COM_DATA+COM_IOCS3B_OUT(pc),d0 * 出力モード取得
rts
OUTPUT_STS_2:
moveq.l #$ff,d0 * 設定値が範囲外
rts
MTAP_MAX_SET:
tst.w d3
bmi MTAP_MAX_SET_2 * 状態取得か?
move.w d3,d0
cmpi.w #JOY_MAX-1,d0 * タップ数がドライバの管理する範囲外か?
bls MTAP_MAX_SET_1
move.w #JOY_MAX-1,d0
MTAP_MAX_SET_1:
lea.l COM_DATA+COM_JOY1_MAX(pc),a0
move.w d0,(a0) * パッド数設定
moveq.l #0,d0 * 正常終了
rts
MTAP_MAX_SET_2:
move.w COM_DATA+COM_JOY1_MAX(pc),d0 * パッド数取得
rts
PLUS_EMULATION:
cmpi.w #JOY_MAX,d4
bcc PLUS_EMULATION_2 * ジョイスティック番号が範囲外か?
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA+JOY_PLUS_EMU(pc),a0
adda.w d0,a0
tst.w d3
bmi PLUS_EMULATION_1 * 状態取得か?
move.w d3,(a0) * エミュレート設定
moveq.l #0,d0 * 正常終了
rts
PLUS_EMULATION_1:
move.w (a0),d0 * エミュレート設定取得
rts
PLUS_EMULATION_2:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
rts
PEM_PNT_SET:
cmpi.w #JOY_MAX,d4
bcc PEM_PNT_SET_3 * ジョイスティック番号が範囲外か?
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA+JOY_PLUS_EMU+2(pc),a0
adda.w d0,a0
tst.w d3
bmi PEM_PNT_SET_1 * 状態取得か?
cmpi.w #$7f,d3
bhi PEM_PNT_SET_2 * 設定値が範囲外か?
move.w d3,(a0) * エミュレートしきい値設定
moveq.l #0,d0 * 正常終了
rts
PEM_PNT_SET_1:
move.w (a0),d0 * エミュレートしきい値取得
rts
PEM_PNT_SET_2:
moveq.l #$ff,d0 * 設定値が範囲外
rts
PEM_PNT_SET_3:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
rts
PS_MEMBREAD:
movem.l d1-d7/a1-a2,-(a7) * レジスタ保存
bsr CHECK_PSCABLE
tst.b d0
bmi PS_MEMBREAD_10
PS_MEMBREAD_1:
bsr PS_MEMFREAD * 1フレーム読み込み
tst.l d0
bmi PS_MEMBREAD_2 * $fb .. メモリカード未接続 $fa .. 読み込みエラー
move.w #100,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
addq.w #1,d4
dbra d5,PS_MEMBREAD_1
moveq.l #0,d0
PS_MEMBREAD_2:
movem.l (a7)+,d1-d7/a1-a2 * レジスタ復帰
rts
PS_MEMBREAD_10:
moveq.l #$fc,d0 * PSケーブルが接続されていない
bra PS_MEMBREAD_2
PS_MEMFREAD:
move.b #8,(a2) * PC4 = 0
moveq.l #$2f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.w d3,d1
addi.w #$0081,d1 * 読み込みメモリカード位置指定
bsr PS_IF * 通信
moveq.l #$52,d1 * CMD 52
bsr PS_IF * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
cmpi.b #$5a,d0
bne PS_MEMFREAD_10
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
move.w d4,d1
lsr.w #8,d1 * アドレス上位
bsr PS_IF * 通信
move.b d4,d1 * アドレス下位
bsr PS_IF * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
move.b d0,d7
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
eor.b d0,d7
move.l d5,-(a7) * レジスタ保存
moveq.l #$7f,d5 * 1フレームバイト数-1
PS_MEMFREAD_1:
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
move.b d0,(a1)+
eor.b d0,d7
dbra d5,PS_MEMFREAD_1
move.l (a7)+,d5 * レジスタ復帰
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
eor.b d0,d7
moveq.l #$00,d1 * CMD 00
bsr PS_IF * 通信
tst.b d7
bne PS_MEMFREAD_11
moveq.l #0,d0 * 正常終了
PS_MEMFREAD_2:
move.b #9,(a2) * PC4 = 1
rts
PS_MEMFREAD_10:
moveq.l #$fb,d0 * メモリカード未接続
bra PS_MEMFREAD_2
PS_MEMFREAD_11:
moveq.l #$fa,d0 * 読み込みエラー
bra PS_MEMFREAD_2
*
* 1バイトコマンド転送 & データ取得
*
* IN D1.B = コマンド
* D6.W = WAIT TIME
* A0.L = $e9a001
* A2.L = $e9a007
*
* OUT D0.B = データ
* D1.L = 破壊
* D2.L = 破壊
PS_IF:
moveq.l #7,d2 * CLKカウンタ
not.b d1 * CMD反転
lsr.b #1,d1 * XフラグにCMD
move.w sr,-(a7)
ori.w #$0700,sr * 割り込み禁止
PS_IF_1:
moveq.l #7,d0
roxl.b #1,d0
move.b #$d,(a2) * CLK = 0
move.b d0,(a2) * CMD書き込み
moveq.l #$2f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.b #$c,(a2) * CLK = 1
moveq.l #$2f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.b (a0),d0 * DAT読み込み
lsr.b #1,d0 * XフラグにDAT
roxr.b #1,d1 * d1にDATをセットして、XフラグにCMD
dbra d2,PS_IF_1
move.b #$e,(a2) * CMD = 1
move.w (a7)+,sr
moveq.l #$2f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.b d1,d0
rts
PS_MEMBWRITE:
movem.l d1-d7/a1-a2,-(a7) * レジスタ保存
bsr CHECK_PSCABLE
tst.b d0
bmi PS_MEMBWRITE_10
PS_MEMBWRITE_1:
bsr PS_MEMFWRITE * 1フレーム書き込み
tst.l d0
bmi PS_MEMBWRITE_2 * $fb .. メモリカード未接続 $f9 .. 書き込みエラー
move.w #8900,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
addq.w #1,d4
dbra d5,PS_MEMBWRITE_1
moveq.l #0,d0
PS_MEMBWRITE_2:
movem.l (a7)+,d1-d7/a1-a2 * レジスタ復帰
rts
PS_MEMBWRITE_10:
moveq.l #$fc,d0 * PSケーブルが接続されていない
bra PS_MEMBWRITE_2
PS_MEMFWRITE:
move.b #8,(a2) * PC4 = 0
moveq.l #$3f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.w d3,d1
addi.w #$0081,d1 * 書き込みメモリカード位置指定
bsr PS_IF2 * 通信
moveq.l #$57,d1 * CMD 57
bsr PS_IF2 * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF2 * 通信
cmpi.b #$5a,d0
bne PS_MEMFWRITE_10
moveq.l #$00,d1 * CMD 00
bsr PS_IF2 * 通信
move.w d4,d1
lsr.w #8,d1 * アドレス上位
move.b d1,d7
bsr PS_IF2 * 通信
move.b d4,d1 * アドレス下位
eor.b d1,d7
bsr PS_IF2 * 通信
move.l d5,-(a7) * レジスタ保存
moveq.l #$7f,d5 * 1フレームバイト数-1
PS_MEMFWRITE_1:
move.b (a1)+,d1 * 書き込みデータ
eor.b d1,d7
bsr PS_IF2 * 通信
dbra d5,PS_MEMFWRITE_1
move.l (a7)+,d5 * レジスタ復帰
move.b d7,d1 * XORフラグ
bsr PS_IF2 * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF2 * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF2 * 通信
moveq.l #$00,d1 * CMD 00
bsr PS_IF2 * 通信
cmpi.b #$47,d0
bne PS_MEMFWRITE_11
moveq.l #0,d0 * 正常終了
PS_MEMFWRITE_2:
move.b #9,(a2) * PC4 = 1
rts
PS_MEMFWRITE_10:
moveq.l #$fb,d0 * メモリカード未接続
bra PS_MEMFWRITE_2
PS_MEMFWRITE_11:
moveq.l #$f9,d0 * 書き込みエラー
bra PS_MEMFWRITE_2
CHECK_PSCABLE:
lea.l $e9a001,a0 * ジョイスティックI/Oアドレス
lea.l 6(a0),a2 * ジョイスティックI/Oアドレス
move.b #9,(a2) * ON
tst.b (a0)
move.b (a0),d0
andi.b #$0f,d0
cmpi.b #2,d0
sne d0
rts
*
* 1バイトコマンド転送 & データ取得
*
* IN D1.B = コマンド
* D6.W = WAIT TIME
* A0.L = $e9a001
* A2.L = $e9a007
*
* OUT D0.B = データ
* D1.L = 破壊
* D2.L = 破壊
PS_IF2:
moveq.l #7,d2 * CLKカウンタ
not.b d1 * CMD反転
lsr.b #1,d1 * XフラグにCMD
move.w sr,-(a7)
ori.w #$0700,sr * 割り込み禁止
PS_IF2_1:
moveq.l #7,d0
roxl.b #1,d0
move.b d0,(a2) * CMD書き込み
move.b #$d,(a2) * CLK = 0
moveq.l #$3f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
move.b #$c,(a2) * CLK = 1
move.b (a0),d0 * DAT読み込み
lsr.b #1,d0 * XフラグにDAT
roxr.b #1,d1 * d1にDATをセットして、XフラグにCMD
moveq.l #$3f,d0 * WAIT TIME
bsr JOY_WAIT * WAIT
dbra d2,PS_IF2_1
move.b #$0e,(a2) * CMD(1)書き込み
move.w (a7)+,sr
move.b d1,d0
rts
PS_MOTOR:
cmpi.w #JOY_MAX,d3
bcc PS_MOTOR_10 * ジョイスティック番号が範囲外か?
move.w d3,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a0
adda.w d0,a0
btst.l #0,d4
sne.b JOY_MOTOR_STS(a0)
move.b d5,d0
btst.l #1,d4
bne PS_MOTOR_1
moveq.l #0,d0
PS_MOTOR_1:
move.b d0,JOY_MOTOR_STS+1(a0)
moveq.l #0,d0 * 正常終了
rts
PS_MOTOR_10:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
rts
ANALOG_GET:
movem.l d1/a1,-(a7) * レジスタ保存
tst.w d3
bmi ANALOG_GET_2 * ジョイスティック番号が範囲外か?
move.w d3,d1
bsr IOCS3B * ジョイスティック読み込み
move.w d0,(a1)+ * デジタルデータ格納
lea.l COM_DATA+COM_ANALOG_DATA(pc),a0
move.l (a0)+,(a1)+ * アナログデータコピー
move.l (a0)+,(a1)+
move.b (a0),(a1)
tst.l d0
beq ANALOG_GET_2 * ジョイスティック番号が範囲外か?
move.w d1,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a0
adda.w d0,a0
move.l JOY_PAD_TYPE(a0),d0
ANALOG_GET_1:
movem.l (a7)+,d1/a1 * レジスタ保存
rts
ANALOG_GET_2:
moveq.l #$fe,d0 * ジョイスティック番号が範囲外
bra ANALOG_GET_1
IOCSF2:
cmpi.w #$3,d1
bcc IOCSF2_1 * モード指定が範囲外か?
move.w d1,d0
add.w d0,d0 * 2倍
move.w IOCSF2_TBL(pc,d0.w),d0
jmp IOCSF2_TBL(pc,d0.w) * 各モード指定に飛ぶ
IOCSF2_1:
moveq.l #$ff,d0 * 設定値が範囲外
rts
IOCSF2_TBL:
.dc.w F2_ANAGET-IOCSF2_TBL * アナログジョイスティック読み込み
.dc.w F2_JOYMODE-IOCSF2_TBL * ジョイスティックモード
.dc.w F2_SPEED-IOCSF2_TBL * 通信速度設定
F2_ANAGET:
movem.l d1-d2/a1,-(a7) * レジスタ保存
moveq.l #0,d1 * ジョイスティック番号0
bsr IOCS3B * ジョイスティック読み込み
move.b COM_DATA+COM_ANALOG_DATA(pc),d2 * ステータス読み込み
move.b COM_DATA+COM_ANALOG_DATA+1(pc),d1 * 上下値読み込み
btst.l #0,d2 * 上下値が有効か?
bne F2_ANAGET_1
move.b #$80,d1 * センター値設定
F2_ANAGET_1:
move.w d1,(a1)+ * 上下値セット
move.b COM_DATA+COM_ANALOG_DATA+2(pc),d1 * 左右値読み込み
btst.l #1,d2 * 左右値が有効か?
bne F2_ANAGET_2
move.b #$80,d1 * センター値設定
F2_ANAGET_2:
move.w d1,(a1)+ * 左右値セット
move.b COM_DATA+COM_ANALOG_DATA+3(pc),d1 * 上下値読み込み(右スティック)
btst.l #2,d2 * 上下値が有効か?
bne F2_ANAGET_3
move.b COM_DATA+COM_ANALOG_DATA+5(pc),d1 * ボタン1(アナログ)値読み込み
btst.l #4,d2 * ボタン1(アナログ)が有効か?
bne F2_ANAGET_3
move.b #$80,d1 * センター値設定
F2_ANAGET_3:
move.w d1,(a1)+ * スロットル値セット
move.b COM_DATA+COM_ANALOG_DATA+4(pc),d1 * 左右値読み込み(右スティック)
btst.l #3,d2 * 左右値が有効か?
bne F2_ANAGET_4
move.b COM_DATA+COM_ANALOG_DATA+6(pc),d1 * ボタン2(アナログ)値読み込み
btst.l #5,d2 * ボタン2(アナログ)が有効か?
bne F2_ANAGET_4
move.b #$80,d1 * センター値設定
F2_ANAGET_4:
move.w d1,(a1)+ * オプション値セット
move.w d0,(a1) * ボタン(デジタル)値セット
moveq.l #0,d0 * 正常終了
movem.l (a7)+,d1-d2/a1 * レジスタ復帰
rts
F2_JOYMODE:
move.l d1,-(a7) * レジスタ保存
moveq.l #0,d1 * ジョイスティック番号0
bsr IOCS3B * ジョイスティック読み込み
moveq.l #0,d0
move.b COM_DATA+COM_ANALOG_DATA(pc),d0 * 有効なアナログ値がないか?
beq F2_JOYMODE_1
moveq.l #1,d0 * アナログモード
F2_JOYMODE_1:
move.l (a7)+,d1 * レジスタ復帰
rts
F2_SPEED:
moveq.l #0,d0 * 最高速度
rts
IOCS3B_VEC:
.dc.l 0
IOCSF2_VEC:
.dc.l 0
STRTG_ADR:
.dc.l 0 * ストラテジアドレス
STRTG_RTN:
move.l a5,STRTG_ADR * ストラテジルーチン
rts
DEV_RTN:
movem.l d0-d6/a1-a2/a5,-(a7) * ドライバルーチン
movea.l STRTG_ADR(pc),a5 * ストラテジアドレス取得
move.w #$5003,d0 * エラーリターン
tst.b $0002(a5) * 処理番号チェック
bne DEV_RTN1 * 初期化以外か?
bsr DEV_INIT * デバイスドライバ初期化
DEV_RTN1:
move.b d0,$0003(a5)
lsr.w #8,d0
move.b d0,$0004(a5) * エラーコードセット
movem.l (a7)+,d0-d6/a1-a2/a5 * レジスタ復帰
rts
DEV_INIT: * ドライバ初期化
pea TITLE(pc)
.dc.w $ff09 * タイトル表示
addq.w #4,a7 * スタック補正
bsr KEEP_CHK1
tst.l d0
beq DEV_INIT_1
pea MSG_DATA1(pc)
DEV_INIT_0:
.dc.w $ff09
addq.w #4,a7
move.w #1,d0 * エラーコード異常終了セット
rts
DEV_INIT_1:
bsr PARM_RTN1
tst.l d0
bmi DEV_INIT_3
move.b SW_R(pc),d0
bne DEV_INIT_3
pea TITLE2(pc)
.dc.w $ff09
pea IOCS3B(pc) * 処理アドレスセット
move.w #$013b,-(a7) * ベクタ番号(IOCS$3B)セット
.dc.w $ff25 * ベクタセット
pea IOCSF2(pc) * 処理アドレスセット
move.w #$01f2,-(a7) * ベクタ番号(IOCS$F2)セット
.dc.w $ff25 * ベクタセット
lea.l 16(a7),a7
moveq.l #$ff,d1
moveq.l #0,d2
moveq.l #0,d3
moveq.l #$3b,d0
trap #15
bsr MODE_DSP
move.l #DEV_INIT,$000e(a5) * デバイスドライバ最終アドレスセット
clr.w d0 * エラーコード正常終了セット
rts
DEV_INIT_3:
pea MSG_DATA10(pc)
bra DEV_INIT_0
PARM_RTN1:
movea.l 18(a5),a1
PARM_RTN1_1:
tst.b (a1)+
bne PARM_RTN1_1
PARM_RTN1_2:
tst.b (a1)
beq PARM_RTN1_4
PARM_RTN1_3:
move.b (a1)+,d0
beq PARM_RTN1_2
bsr PARM_SUB
tst.l d0
beq PARM_RTN1_3
rts
PARM_RTN1_4:
moveq.l #0,d0
rts
MAIN:
pea TITLE(pc)
.dc.w $ff09 * タイトル表示
addq.w #4,a7
movea.l a2,a1
bsr PARM_RTN2
tst.l d0
bmi MAIN_5
bsr KEEP_CHK2
tst.l d0
beq MAIN_1
move.b SW_R(pc),d0
bne MAIN_4
pea MSG_DATA2(pc)
MAIN_0:
bsr MODE_CHG
move.b SW_D(pc),d0
bne MAIN_01
bsr MODE_DSP
MAIN_01:
.dc.w $ff09
addq.w #4,a7
.dc.w $ff00
MAIN_1:
bsr KEEP_CHK1
tst.l d0
beq MAIN_2
pea MSG_DATA1(pc)
bra MAIN_0
MAIN_2:
move.b SW_R(pc),d0
beq MAIN_3
pea MSG_DATA3(pc)
bra MAIN_01
MAIN_3:
pea IOCS3B(pc) * 処理アドレスセット
move.w #$013b,-(a7) * ベクタ番号(IOCS$3B)セット
.dc.w $ff25 * ベクタセット
move.l d0,IOCS3B_VEC
pea IOCSF2(pc) * 処理アドレスセット
move.w #$01f2,-(a7) * ベクタ番号(IOCS$F2)セット
.dc.w $ff25 * ベクタセット
move.l d0,IOCSF2_VEC
lea.l 12(a7),a7
moveq.l #$ff,d1
moveq.l #0,d2
moveq.l #0,d3
moveq.l #$3b,d0
trap #15
move.b SW_D(pc),d0
bne MAIN_31
pea TITLE2(pc)
.dc.w $ff09
addq.w #4,a7
bsr MODE_DSP
MAIN_31:
pea MSG_DATA4(pc)
.dc.w $ff09
addq.w #2,a7
clr.w (a7)
move.l #DEV_INIT-DEVHEAD,-(a7)
.dc.w $ff31
MAIN_4:
bsr KEEP_CHK3
tst.l d0
bne MAIN_41
pea MSG_DATA6(pc)
bra MAIN_01
MAIN_41:
moveq.l #$ff,d1
moveq.l #0,d2
moveq.l #1,d3
moveq.l #$3b,d0
trap #15
lea.l IOCS3B_VEC-DEVHEAD+256(a0),a1
move.l (a1),-(a7)
move.w #$013b,-(a7) * ベクタ番号(IOCS$3B)セット
.dc.w $ff25 * ベクタセット
lea.l IOCSF2_VEC-DEVHEAD+256(a0),a1
move.l (a1),2(a7)
move.w #$01f2,(a7) * ベクタ番号(IOCS$F2)セット
.dc.w $ff25 * ベクタセット
pea $10(a0)
.dc.w $ff49
pea MSG_DATA5(pc)
.dc.w $ff09
lea.l 14(a7),a7
.dc.w $ff00
MAIN_5:
pea MSG_DATA10(pc)
.dc.w $ff09
pea TITLE3(pc)
.dc.w $ff09
addq.w #8,a7
.dc.w $ff00
MODE_CHG:
moveq.l #$ff,d1
move.b SW_M(pc),d0
beq MODE_CHG2
moveq.l #$10,d2
move.w COM_DATA+COM_HANTEI_MODE(pc),d3
moveq.l #$3b,d0
trap #15
MODE_CHG2:
moveq.l #JOY_MAX-1,d4
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a2
adda.w d0,a2
lea.l SW_B+JOY_MAX(pc),a3
MODE_CHG2_1:
tst.b -(a3)
beq MODE_CHG2_3
move.w JOY_CNV_MODE(a2),d3
beq MODE_CHG2_2
lea.l JOY_CNV_DATA(a2),a1
moveq.l #$12,d2
moveq.l #$3b,d0
trap #15
MODE_CHG2_2:
moveq.l #$11,d2
moveq.l #$3b,d0
trap #15
MODE_CHG2_3:
lea.l -DATA_SIZE(a2),a2
dbra d4,MODE_CHG2_1
MODE_CHG3:
move.b SW_I(pc),d0
beq MODE_CHG4
moveq.l #$13,d2
move.w COM_DATA+COM_IOCS3B_OUT(pc),d3
moveq.l #$3b,d0
trap #15
MODE_CHG4:
move.b SW_T(pc),d0
beq MODE_CHG5
moveq.l #$15,d2
move.w COM_DATA+COM_JOY1_MAX(pc),d3
moveq.l #$3b,d0
trap #15
MODE_CHG5:
moveq.l #JOY_MAX-1,d4
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a2
adda.w d0,a2
lea.l SW_E+JOY_MAX(pc),a3
MODE_CHG6_1:
tst.b -(a3)
beq MODE_CHG6_2
move.w JOY_PLUS_EMU(a2),d3
moveq.l #$16,d2
moveq.l #$3b,d0
trap #15
MODE_CHG6_2:
lea.l -DATA_SIZE(a2),a2
dbra d4,MODE_CHG6_1
moveq.l #JOY_MAX-1,d4
move.w d4,d0
lsl.w #8,d0
lea.l JOY_DATA(pc),a2
adda.w d0,a2
lea.l SW_P+JOY_MAX(pc),a3
MODE_CHG7_1:
tst.b -(a3)
beq MODE_CHG7_2
move.w JOY_PLUS_EMU+2(a2),d3
moveq.l #$17,d2
moveq.l #$3b,d0
trap #15
MODE_CHG7_2:
lea.l -DATA_SIZE(a2),a2
dbra d4,MODE_CHG7_1
rts
MODE_DSP:
pea MSG_DATA20(pc)
.dc.w $ff09
moveq.l #$ff,d1
moveq.l #$10,d2
moveq.l #$ff,d3
moveq.l #$3b,d0
trap #15
tst.w d0
beq MODE_DSP_2
cmpi.w #1,d0
bne MODE_DSP_1
pea MSG_DATA22(pc)
bra MODE_DSP_3
MODE_DSP_1:
pea MSG_DATA23(pc)
bra MODE_DSP_3
MODE_DSP_2:
pea MSG_DATA21(pc)
MODE_DSP_3:
.dc.w $ff09
pea MSG_DATA30(pc)
.dc.w $ff09
lea.l 12(a7),a7
moveq.l #$15,d2
moveq.l #$3b,d0
trap #15
move.w d0,d5
moveq.l #JOY_MAX-1,d6
moveq.l #0,d4
MODE_DSP_4:
pea MSG_DATA31(pc)
.dc.w $ff09
lea.l MSG_DATA32(pc),a1
move.b d4,d0
addi.b #$30,d0
move.b d0,(a1)
move.l a1,(a7)
.dc.w $ff09
moveq.l #$11,d2
moveq.l #$3b,d0
trap #15
tst.w d0
beq MODE_DSP_5
pea MSG_DATA41(pc)
bra MODE_DSP_6
MODE_DSP_5:
pea MSG_DATA40(pc)
MODE_DSP_6:
.dc.w $ff09
addq.w #8,a7
pea MSG_DATA33(pc)
.dc.w $ff09
lea.l TITLE(pc),a1
moveq.l #8,d2
move.w d4,d3
moveq.l #$3b,d0
trap #15
tst.l d0
bmi MODE_DSP_8
andi.w #$00ff,d0
lea.l PAD_DISP_INFO(pc),a2
PAD_DISP_1:
move.l (a2)+,d2
bmi PAD_DISP_2
cmp.l d2,d0
beq PAD_DISP_2
addq.w #4,a2
bra PAD_DISP_1
PAD_DISP_2:
move.l (a2),-(a7)
bra MODE_DSP_9
MODE_DSP_8:
pea MSG_DATA47(pc)
MODE_DSP_9:
.dc.w $ff09
addq.w #8,a7
pea MSG_DATA34(pc)
.dc.w $ff09
cmp.w d5,d4
beq MODE_DSP_10
bcs MODE_DSP_11
pea MSG_DATA46(pc)
bra MODE_DSP_12
MODE_DSP_10:
pea MSG_DATA45(pc)
bra MODE_DSP_12
MODE_DSP_11:
pea MSG_DATA44(pc)
MODE_DSP_12:
.dc.w $ff09
addq.w #8,a7
pea MSG_DATA35(pc)
.dc.w $ff09
cmpi.w #1,d4
beq MODE_DSP_13
bcs MODE_DSP_14
pea MSG_DATA46(pc)
bra MODE_DSP_15
MODE_DSP_13:
pea MSG_DATA45(pc)
bra MODE_DSP_15
MODE_DSP_14:
pea MSG_DATA44(pc)
MODE_DSP_15:
.dc.w $ff09
addq.w #8,a7
pea MSG_DATA36(pc)
.dc.w $ff09
lea.l MSG_DATA37(pc),a1
moveq.l #$16,d2
moveq.l #$ff,d3
moveq.l #$3b,d0
trap #15
move.b d0,d2
lsr.b #4,d2
move.b DTOH_TBL(pc,d2.w),(a1)
andi.w #$000f,d0
move.b DTOH_TBL(pc,d0.w),1(a1)
move.l a1,(a7)
.dc.w $ff09
lea.l MSG_DATA38(pc),a1
moveq.l #$17,d2
moveq.l #$3b,d0
trap #15
move.b d0,d2
lsr.b #4,d2
move.b DTOH_TBL(pc,d2.w),(a1)
andi.w #$000f,d0
move.b DTOH_TBL(pc,d0.w),1(a1)
move.l a1,(a7)
.dc.w $ff09
addq.w #4,a7
addq.w #1,d4
dbra d6,MODE_DSP_4
moveq.l #$13,d2
moveq.l #$3b,d0
trap #15
tst.w d0
bne MODE_DSP_20
pea MSG_DATA25(pc)
bra MODE_DSP_21
MODE_DSP_20:
pea MSG_DATA24(pc)
MODE_DSP_21:
.dc.w $ff09
addq.w #4,a7
rts
DTOH_TBL:
.dc.b '0'
.dc.b '1'
.dc.b '2'
.dc.b '3'
.dc.b '4'
.dc.b '5'
.dc.b '6'
.dc.b '7'
.dc.b '8'
.dc.b '9'
.dc.b 'A'
.dc.b 'B'
.dc.b 'C'
.dc.b 'D'
.dc.b 'E'
.dc.b 'F'
KEEP_CHK1:
movem.l d1-d2/a1,-(a7) * レジスタ保存
moveq.l #$ff,d1 * モード指定
moveq.l #1,d2 * 常駐状態取得
moveq.l #$3b,d0
trap #15
tst.l d0
beq KEEP_CHK1_1
move.l d0,a1
moveq.l #$84,d0
trap #15
cmpi.l #'JOYD',d0
bne KEEP_CHK1_2
moveq.l #$83,d0
trap #15
cmpi.w #'RV',d0
bne KEEP_CHK1_2
moveq.l #1,d0 * 常駐している
KEEP_CHK1_1:
movem.l (a7)+,d1-d2/a1 * レジスタ復帰
rts
KEEP_CHK1_2:
moveq.l #0,d0 * 常駐していない
bra KEEP_CHK1_1
KEEP_CHK2:
pea.l $0000.w
.dc.w $ff20
move.l d0,(a7)
KEEP_CHK2_1:
move.l (a0),d1
beq KEEP_CHK2_2
move.l d1,a0
cmpi.l #'JOYD',256+14(a0)
bne KEEP_CHK2_1
cmpi.w #'RV',256+18(a0)
bne KEEP_CHK2_1
moveq.l #1,d1
KEEP_CHK2_2:
.dc.w $ff20
addq.w #4,a7
move.l d1,d0
rts
KEEP_CHK3:
movem.l d1-d2/a1,-(a7) * レジスタ保存
moveq.l #$ff,d1 * モード指定
moveq.l #1,d2 * 常駐状態取得
moveq.l #$3b,d0
trap #15
tst.l d0
beq KEEP_CHK3_1
move.l d0,a1
moveq.l #$84,d0
trap #15
cmpi.l #'JOYD',d0
bne KEEP_CHK3_2
moveq.l #$83,d0
trap #15
cmpi.w #'RV',d0
bne KEEP_CHK3_2
addq.w #2,a1
moveq.l #$84,d0
trap #15
cmp.l KEEP_CHK_VER(pc),d0
bne KEEP_CHK3_2
moveq.l #1,d0 * 常駐している
KEEP_CHK3_1:
movem.l (a7)+,d1-d2/a1 * レジスタ復帰
rts
KEEP_CHK3_2:
moveq.l #0,d0 * 常駐していない
bra KEEP_CHK3_1
PARM_RTN2:
tst.b (a1)+
beq PARM_RTN2_2
PARM_RTN2_1:
move.b (a1)+,d0
beq PARM_RTN2_2
cmpi.b #' ',d0
beq PARM_RTN2_1
bsr PARM_SUB
tst.l d0
beq PARM_RTN2_1
rts
PARM_RTN2_2:
moveq.l #0,d0
rts
PARM_SUB:
cmpi.b #'/',d0
beq PARM_SUB_1
cmpi.b #'-',d0
bne PARM_SUB_ERR1
PARM_SUB_1:
move.b (a1)+,d0
beq PARM_SUB_ERR1
ori.b #$20,d0
cmpi.b #'m',d0
beq PARM_SUB_M
cmpi.b #'i',d0
beq PARM_SUB_I
cmpi.b #'r',d0
beq PARM_SUB_R
cmpi.b #'t',d0
beq PARM_SUB_T
cmpi.b #'e',d0
beq PARM_SUB_E
cmpi.b #'p',d0
beq PARM_SUB_P
cmpi.b #'d',d0
beq PARM_SUB_D
cmpi.b #'b',d0
bne PARM_SUB_ERR1
PARM_SUB_B:
move.b (a1)+,d0
subi.b #'0',d0
cmpi.b #JOY_MAX-1,d0
bhi PARM_SUB_ERR1
ext.w d0
move.w d0,d1
move.b (a1),d0
beq PARM_SUB_B2
cmpi.b #' ',d0
beq PARM_SUB_B2
bsr READ_CNV_DATA
tst.l d0
bmi PARM_SUB_ERR2
moveq.l #1,d0
PARM_SUB_B1:
lea.l SW_B(pc),a2
st.b 0(a2,d1.w)
lea.l JOY_DATA(pc),a2
lsl.w #8,d1
adda.w d1,a2
move.w d0,JOY_CNV_MODE(a2)
moveq.l #0,d0
rts
PARM_SUB_B2:
moveq.l #0,d0
bra PARM_SUB_B1
PARM_SUB_T:
move.b (a1)+,d0
subi.b #'0',d0
cmpi.b #9,d0
bhi PARM_SUB_ERR1
ext.w d0
move.w d0,COM_DATA+COM_JOY1_MAX
st.b SW_T
moveq.l #0,d0
rts
PARM_SUB_E:
move.b (a1)+,d0
subi.b #'0',d0
cmpi.b #JOY_MAX-1,d0
bhi PARM_SUB_ERR1
ext.w d0
move.w d0,d1
move.b (a1)+,d0
cmpi.b #',',d0
bne PARM_SUB_ERR1
move.b (a1)+,d0
ori.b #$20,d0
subi.b #'0',d0
cmpi.b #9,d0
bls PARM_SUB_E1
subi.b #$31,d0
cmpi.b #5,d0
bhi PARM_SUB_ERR1
addi.b #10,d0
PARM_SUB_E1:
ext.w d0
lea.l SW_E(pc),a2
st.b 0(a2,d1.w)
lea.l JOY_DATA(pc),a2
lsl.w #8,d1
adda.w d1,a2
move.w d0,JOY_PLUS_EMU(a2)
moveq.l #0,d0
rts
PARM_SUB_P:
move.b (a1)+,d0
subi.b #'0',d0
cmpi.b #JOY_MAX-1,d0
bhi PARM_SUB_ERR1
ext.w d0
move.w d0,d1
move.b (a1)+,d0
cmpi.b #',',d0
bne PARM_SUB_ERR1
moveq.l #0,d2
move.b (a1)+,d2
subi.b #'0',d2
cmpi.b #7,d2
bhi PARM_SUB_ERR1
lsl.b #4,d2
move.b (a1)+,d0
ori.b #$20,d0
subi.b #'0',d0
cmpi.b #9,d0
bls PARM_SUB_P1
subi.b #$31,d0
cmpi.b #5,d0
bhi PARM_SUB_ERR1
addi.b #10,d0
PARM_SUB_P1:
or.b d0,d2
lea.l SW_P(pc),a2
st.b 0(a2,d1.w)
lea.l JOY_DATA(pc),a2
lsl.w #8,d1
adda.w d1,a2
move.w d2,JOY_PLUS_EMU+2(a2)
moveq.l #0,d0
rts
PARM_SUB_R:
st.b SW_R
moveq.l #0,d0
rts
PARM_SUB_M:
move.b (a1)+,d0
subi.b #'0',d0
cmpi.b #2,d0
bhi PARM_SUB_ERR1
ext.w d0
move.w d0,COM_DATA+COM_HANTEI_MODE
st.b SW_M
moveq.l #0,d0
rts
PARM_SUB_I:
move.b (a1)+,d0
subi.b #'0',d0
cmpi.b #1,d0
bhi PARM_SUB_ERR1
ext.w d0
move.w d0,COM_DATA+COM_IOCS3B_OUT
st.b SW_I
moveq.l #0,d0
rts
PARM_SUB_D:
st.b SW_D
moveq.l #0,d0
rts
PARM_SUB_ERR2:
pea MSG_DATA11(pc)
.dc.w $ff09
addq.w #4,a7
PARM_SUB_ERR1:
moveq.l #$ff,d0
rts
READ_CNV_DATA:
movem.l d1/a2,-(a7)
clr.w -(a7)
move.l a1,-(a7)
READ_CNV_DATA_1:
move.b (a1)+,d0
beq READ_CNV_DATA_2
cmpi.b #' ',d0
bne READ_CNV_DATA_1
clr.b -(a1)
.dc.w $ff3d
move.b #' ',(a1)
bra READ_CNV_DATA_5
READ_CNV_DATA_2:
subq.w #1,a1
.dc.w $ff3d
READ_CNV_DATA_5:
addq.w #6,a7
tst.l d0
bmi READ_CNV_DATA_3
pea.l $0032.w
lsl.w #8,d1
lea.l JOY_DATA+JOY_CNV_DATA(pc),a2
pea 0(a2,d1.w)
move.w d0,-(a7)
.dc.w $ff3f
move.l d0,d1
.dc.w $ff3e
lea.l 10(a7),a7
move.l d1,d0
bmi READ_CNV_DATA_3
cmpi.l #32,d1
bcs READ_CNV_DATA_4
moveq.l #0,d0
READ_CNV_DATA_3:
movem.l (a7)+,d1/a2
rts
READ_CNV_DATA_4:
moveq.l #$ff,d0
bra READ_CNV_DATA_3
.data
PAD_DISP_INFO:
.dc.l PAD_TYPE_ATARI*65536,MSG_DATA_PAD_ATARI
.dc.l PAD_TYPE_MD*65536+$00,MSG_DATA_PAD_MD3
.dc.l PAD_TYPE_MD*65536+$01,MSG_DATA_PAD_MD6
.dc.l PAD_TYPE_MD*65536+$0f,MSG_DATA_PAD_MDNC
.dc.l PAD_TYPE_SS*65536+$00,MSG_DATA_PAD_SSD
.dc.l PAD_TYPE_SS*65536+$01,MSG_DATA_PAD_SSA
.dc.l PAD_TYPE_SS*65536+$0f,MSG_DATA_PAD_SSNC
.dc.l PAD_TYPE_PS*65536+$01,MSG_DATA_PAD_PSMOUSE
.dc.l PAD_TYPE_PS*65536+$02,MSG_DATA_PAD_PSA1
.dc.l PAD_TYPE_PS*65536+$04,MSG_DATA_PAD_PSD
.dc.l PAD_TYPE_PS*65536+$05,MSG_DATA_PAD_PSA2
.dc.l PAD_TYPE_PS*65536+$07,MSG_DATA_PAD_PSA2
.dc.l PAD_TYPE_PS*65536+$0e,MSG_DATA_PAD_PSJOGCON
.dc.l PAD_TYPE_PS*65536+$0f,MSG_DATA_PAD_PSNC
.dc.l $ffffffff,MSG_DATA_PAD_UNKNOW
SW_D:
.dc.b 0
SW_I:
.dc.b 0
SW_R:
.dc.b 0
SW_M:
.dc.b 0
SW_T:
.dc.b 0
SW_E:
.dcb.b JOY_MAX,0
SW_P:
.dcb.b JOY_MAX,0
SW_B:
.dcb.b JOY_MAX,0
.even
TITLE:
.dc.b $0d,$0a
.dc.b 'JOYSTICK DRIVER for X680x0 version 2.10',$0d,$0a
.dc.b 'Copyright 1994-98 by HUYE',$0d,$0a,0
TITLE2:
.dc.b 'CPSF-PCアダプタ、MD変換コネクタの使用が可能です',$0d,$0a,0
TITLE3:
.dc.b '<usage> JOYDRV.X [option]',$0d,$0a
.dc.b '<option>',$0d,$0a
.dc.b ' /M0 .. MDマルチタップ及びSS,PS接続ケーブルを使用不可にする',$0d,$0a
.dc.b ' /M1 .. MDマルチタップ及びSS,PS接続ケーブルを使用可能にする(キャッシュ無し)',$0d,$0a
.dc.b ' /M2 .. MDマルチタップ及びSS,PS接続ケーブルを使用可能にする(キャッシュ有り)(def.)',$0d,$0a
.dc.b ' /B? .. ビット変換無し(?はジョイスティック番号0~6)(def.)',$0d,$0a
.dc.b ' /B?ファイル名 .. ビット変換有り(ファイル名は、変換データを格納しているファイル、',$0d,$0a
.dc.b ' ?はジョイスティック番号0~6)',$0d,$0a
.dc.b ' /I0 .. ROM IOCS互換モード',$0d,$0a
.dc.b ' /I1 .. JOYDRV拡張モード(def.)',$0d,$0a
.dc.b ' /T? .. マルチタップ使用時のマルチタップの最大パッド数(?は、0~9)(def.=',$2f+JOY_MAX,')',$0d,$0a
.dc.b ' /E?,? .. アナログスティックの十字キーエミュレート指定',$0d,$0a
.dc.b ' 1つ目の?はジョイスティック番号0~6、2つ目の?は、0~F(def.=3)',$0d,$0a
.dc.b ' /P?,?? .. 十字キーエミュレート時のしきい値指定',$0d,$0a
.dc.b ' 1つ目の?はジョイスティック番号0~6、2つ目の??は、00~7F(def.=4F)',$0d,$0a
.dc.b ' /D .. 設定状態の表示禁止',$0d,$0a
.dc.b ' /R .. 常駐解除(コマンドラインからの実行時のみ有効)',$0d,$0a
.dc.b '/は-でも可、アルファベットは小文字も可',$0d,$0a,0
MSG_DATA1:
.dc.b 'JOYDRVは既に登録されています',$0d,$0a,0
MSG_DATA2:
.dc.b 'JOYDRVは既に常駐しています',$0d,$0a,0
MSG_DATA3:
.dc.b 'JOYDRVは常駐していません',$0d,$0a,0
MSG_DATA4:
.dc.b 'JOYDRVは常駐しました',$0d,$0a,0
MSG_DATA5:
.dc.b 'JOYDRVの常駐を解除しました',$0d,$0a,0
MSG_DATA6:
.dc.b 'IOCS$3Bのベクタが変更されているかJOYDRVのバージョンが違うので常駐が解除できません',$0d,$0a,0
MSG_DATA10:
.dc.b 'パラメータ指定に誤りがあります',$0d,$0a,0
MSG_DATA11:
.dc.b '変換データファイルの読み込みに失敗しました',$0d,$0a,0
MSG_DATA20:
.dc.b 'MDマルチタップ及びSS,PSパッド接続ケーブルは使用',0
MSG_DATA21:
.dc.b 'できません',$0d,$0a,0
MSG_DATA22:
.dc.b '可能です(キャッシュ無し)',$0d,$0a,0
MSG_DATA23:
.dc.b '可能です(キャッシュ有り)',$0d,$0a,0
MSG_DATA24:
.dc.b 'JOYDRV拡張モードで動作しています',$0d,$0a,0
MSG_DATA25:
.dc.b 'ROM IOCS互換モードで動作しています',$0d,$0a,0
MSG_DATA30:
.dc.b 'ジョイスティック番号 ビット変換 接続(マルチタップあり:マルチタップ無し) 十字キーエミュレート しきい値',$0d,$0a,0
MSG_DATA31:
.dc.b ' ',0
MSG_DATA32:
.dc.b '0 ',0
MSG_DATA33:
.dc.b ' ',0
MSG_DATA34:
.dc.b ' ',0
MSG_DATA35:
.dc.b ' : ',0
MSG_DATA36:
.dc.b ' ',0
MSG_DATA37:
.dc.b '03 ',0
MSG_DATA38:
.dc.b '4F',$0d,$0a,0
MSG_DATA40:
.dc.b '無し',0
MSG_DATA41:
.dc.b '有り',0
MSG_DATA44:
.dc.b 'PORT1',0
MSG_DATA45:
.dc.b 'PORT2',0
MSG_DATA46:
.dc.b '-----',0
MSG_DATA47:
.dc.b '--------',0
MSG_DATA_PAD_UNKNOW:
.dc.b '不明 ',0
MSG_DATA_PAD_ATARI:
.dc.b 'アタリ ',0
MSG_DATA_PAD_MD3:
.dc.b 'メガドラ3B',0
MSG_DATA_PAD_MD6:
.dc.b 'メガドラ6B',0
MSG_DATA_PAD_MDNC:
.dc.b 'メガドラNC',0
MSG_DATA_PAD_SSD:
.dc.b 'SSデジタル',0
MSG_DATA_PAD_SSA:
.dc.b 'SSアナログ ',0
MSG_DATA_PAD_SSNC:
.dc.b 'SS N.C. ',0
MSG_DATA_PAD_PSD:
.dc.b 'PSデジタル',0
MSG_DATA_PAD_PSA2:
.dc.b 'PSアナログ2',0
MSG_DATA_PAD_PSA1:
.dc.b 'PSアナログ1',0
MSG_DATA_PAD_PSMOUSE:
.dc.b 'PSマウス',0
MSG_DATA_PAD_PSJOGCON:
.dc.b 'PSジョグ ',0
MSG_DATA_PAD_PSNC:
.dc.b 'PS N.C. ',0
.end MAIN